<script>
  // let map = new Map()
  // map.set("uname", "张三")
  // map.set("address", "北京")
  // map.set(true, "是否上学")
  // map.set(function(){},"跑步上学")
  // map.set(Symbol(),"大学在北京")

  // map.delete("uname")
  // // map.clear()
  // map.set("address","beijing")
  // // console.log()
  // let result =map.get("address")
  // console.log(result)
  // console.log(map)

  // let map = new Map([["uname", "张三"], ["address", "北京"]])
  // console.log(map)
  // let obj = {
  //   uname: "张三",
  //   address: "北京"
  // }

  // let arr = ["北京", "上海", "广州"]
  // console.log(arr.entries().next())
  // console.log(arr.entries().next())


  // Object.values()
  // Object.keys()
  // Object.create()   
  // Object.defineProperty()
  // Object.defineProperties()
  // // Proxy()
  // // Reflect
  // Object.entries()
  // console.log(Object.entries(obj))

  // let map = new Map(Object.entries(obj))
  // console.log(map)

  // let obj1 = { uname: "张三" }
  // // let obj2=obj1
  // let obj2 = { uname: "张三" }
  // console.log(Object.is(obj1, obj2))


  // let obj1 = { uname: "张三", address: "北京" }
  // let obj2 = { uname: "李四", age: 21 }

  // let obj3 = Object.assign(obj1, obj2)
  // // console.log(obj3)

  // console.log(obj3 == obj2)


  // let obj1 = { uname: "张三" }
  // Object.freeze(obj1)     //冻住
  // obj1.uname = "李四"
  // console.log(obj1)


  // let obj = { age: 21 }
  // Object.defineProperty(obj, "uname", {
  //   value: "张三",
  //   writable: false,      //是否可以写
  //   enumerable: false,    //是否可遍历（枚举）   Object.keys()拿不到这个key
  //   configurable:true,    //是否可删除
  // })

  // obj.uname = "李四"
  // console.log(obj)

  // console.log(obj.uname)
  // console.log(Object.keys(obj))
  // console.log(obj)

  // for (let key in obj) {
  //   console.log(key)
  // }

  // delete obj.uname
  // console.log(obj)



  let data = { uname: "张三" }
  let vm = {}

  for (let key in data) {
    Object.defineProperty(data, "uname", {
      get() {
        return vm[key]
      },
      set(val) {
        vm[key] = val
      }
    })

  }

  data.uname="李四"
  data.age = 21
  console.log(vm)

  // Object.defineProperty(data, "age", {
  //   get() {
  //     return vm.age
  //   },
  //   set(val) {
  //     vm.age = val

  //   }
  // })

  // data.age = 21
  // console.log(vm)






  // obj1.uname = "李四"
  // // console.log(obj2)
  // // console.log(obj1.uname)
  // console.log(obj1)



  let data = { uname: "张三" }
  // let vm = {}

  let vm = new Proxy(data, {
    get(data, prop) {
      return data[prop]
    },
    set(data, prop, val) {
      data[prop] = val
    }
  })

  // data.uname="李四"
  // console.log(vm)
  data.age=21
  console.log(vm)
























</script>s